#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QPalette>
#include "mpushbutton.h"
#include "mainwindow.h"
#include "findwindow.h"
#include "closewindow.h"
#include "formwindow.h"//表格布局
#include "gridwindow.h"
#include "my_calculator.h"
#include "windowxp.h"
#include "my_notepad.h"
#include "uimainwindow.h"
#include "eventwin.h"
#include "logineventwindow.h"
#include <QDebug>
#include "jsonwindow.h"
#include "ui_chartform.h"
// 自定义的 CustomApplication 类，继承自 QApplication
class CustomApplication : public QApplication
{
public:
    // 定义 LoginEventWindow 对象 w，用于显示登录窗口
    LoginEventWindow w;

    // 构造函数，接受命令行参数 a 和 c
    CustomApplication(int a, char* c[]) : QApplication(a, c) {
        qDebug() << 1;  // 打印 "1"，用于调试，确认构造函数被调用
        w.show();  // 显示登录窗口

        // 为 userEdit 和 pwdEdit 输入框安装事件过滤器，this 指向 CustomApplication
        w.userEdit->installEventFilter(this);
        w.pwdEdit->installEventFilter(this);
    }

    // 重写事件过滤器函数，用于拦截并处理指定对象的事件
    bool eventFilter(QObject *watched, QEvent *event)
    {
        // 判断是否为 userEdit 对象，并且事件类型为按键事件
        if ((CustomEidt*)watched == w.userEdit && event->type() == QEvent::KeyPress) {
            qDebug() << "CustomApplication:eventFilter";  // 打印 "CustomApplication:eventFilter"
        }
        // 调用基类的 eventFilter 方法继续处理事件
        // 如果返回 false，表示事件未处理，会传递到目标对象的事件处理函数
        return QApplication::eventFilter(watched, event);
    }

    // 重写 notify 方法，用于统一处理所有事件
    bool notify(QObject *reciver, QEvent *event)
    {
        // 判断是否为 userEdit 对象，并且事件类型为按键事件
        if ((CustomEidt*)reciver == w.userEdit && event->type() == QEvent::KeyPress) {
            qDebug() << "notify";  // 打印 "notify"
        }
        // 调用父类的 notify 方法，继续分发事件
        // 如果返回 false，事件会被进一步处理（如被事件过滤器或事件处理函数处理）
        return QApplication::notify(reciver, event);
    }
};



int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    //事件的使用
    //CustomApplication a(argc, argv);




#if 0   //11_7代码
    QApplication a(argc, argv);
    QWidget w;

    // 创建按钮并设置图标
    QPushButton btn(QIcon("://1.jpg"), "开机", &w);
    btn.setGeometry(50,50,200,200);
    btn.setIconSize(QSize(70, 70));  // 设置图标大小

    QPushButton btn2(QIcon("://1.jpg"), "关机", &w);
    btn2.setGeometry(200,300,200,200);
    btn2.setIconSize(QSize(70, 70));  // 设置图标大小

    w.show();

    return a.exec();
#endif


#if 0
    //分析出来：应该实例化自己的窗口对象
    //QWidget w;
    //MPushButton *btn = new MPushButton(&w);
    MainWindow w;
    w.show();
#endif

#if 1//实现的单独模块,各个界面
    //FindWindow w;
    //w.show();

    //CloseWindow k;
    //k.show();

    //FormWindow m;
    //m.show();

    //GridWindow n;
    //n.show();

    //利用connect函数用按钮关闭界面
    //MainWindow w;
    //w.show();
#endif

    //我的计算器
    //my_calculator w;
    //w.show();

    //学习使用主界面mainwindow
    //WindowXP xp;
    //xp.show();

    //我的记事本
    //my_notepad z;
    //z.show();

    //ui主界面
//  UIMainWindow kk;
//  kk.show();

    //学习事件
//    EventWin hk;
//    hk.show();

//    LoginEventWindow w;
//    w.show();

    //qjson的使用
//    JsonWindow w;
//    w.show();


    return a.exec();

}
